package com.nulldev.util.VariableAPI.util.math;

import com.nulldev.util.VariableAPI.util.strings.splitters.Splitters;
import com.nulldev.util.data.Variables;

public class MathUtilConverter {

	public static Number convert(final String str) {
		Variables.requireNonNull(str, "str");
		final boolean hasDecimalPoint = str.contains(".");
		if (!hasDecimalPoint)
			return nonDecimalConvert(str);
		return decimalConvert(str);
	}

	private static Number decimalConvert(final String str) {
		final String[] sp = Splitters.splitString(str, ".");
		final int dpLen = sp[1].length();
		if (dpLen <= 3)
			return Double.parseDouble(str);
		return Float.parseFloat(str);
	}

	private static Number nonDecimalConvert(final String str) {
		final boolean isNegative = str.startsWith("-");
		final int length = isNegative ? (str.length() - 1) : str.length();
		if (length <= 4)
			return Short.parseShort(str);
		if (length < 6)
			return Integer.parseInt(str);
		return Long.parseLong(str);
	}
}
